<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // 数组解构赋值  和 对象解构赋值
  // ES6 允许按照一定模式，从数组和对象中提取值，对变量进行赋值，这被称为解构（Destructuring）。

  // 本质上，这种写法属于“模式匹配”，只要等号两边的模式相同，左边的变量就会被赋予对应的值。下面是一些使用嵌套数组进行解构的例子。

  // 传统的写法
  // var arr = [1, 2, 3];
  // var a = arr[0];
  // var b = arr[1];
  // var c = arr[2];

  // ES6   

  // 数组解构  => 对应下标取值,等号右边的值对应下标 赋值给左边的变量
  // var [a, b, c] = [1, 2, 3]
  // console.log(a,b,c);

  // var [a, ,c] = [1, 2, 3]
  // console.log(a,c);

  // 解构过程中,如果解构不成功则默认undefined
  // var [a, b, c, d] = [1, 2, 3]
  // console.log(a,b,c,d);

  // 解构过程中,可以给变量设置默认值
  // var [a, b, c, d=0] = [1, 2, 3, null]; 
  // d = d == undefined ? 0 : d
  // console.log(a,b,c,d);

  // 解构过程中需要注意的问题; 
  // 如果等号的右边不是数组（或者严格地说，不是可遍历的结构(伪数组)），那么将会报错。

  // 报错
  // let [foo] = 1;
  // let [foo] = false;
  // let [foo] = NaN;
  // let [foo] = undefined;
  // let [foo] = null;
  // let [foo] = {};

  // let [a,b,c] = "123";
  // console.log(a,b,c);


  // 练习 
  var list = [1, [[2], 3]];

  var [a, brr] = list; // a:1   brr:[[2], 3]
  var [crr, c] = brr;  // crr = [2]  c:3
  var [b] = crr;  // b :2

  // var [a, [[b],c]] = list; 
  var [a, [[b], c]] = list;

  var [a, [[b], c]] = [1, [[2], 3]];









</script>

</html>